home *** CD-ROM | disk | FTP | other *** search
/ Turnbull China Bikeride / Turnbull China Bikeride - Disc 2.iso / STUTTGART / FROMUTS / CDUNGEON / !CDUNGEON / c / DSO2 < prev    next >
Text File  |  1991-05-20  |  4KB  |  189 lines

  1. /* MOVETO- MOVE PLAYER TO NEW ROOM */
  2.  
  3. /*COPYRIGHT 1980, INFOCOM COMPUTERS AND COMMUNICATIONS, CAMBRIDGE MA. 02142*/
  4. /* ALL RIGHTS RESERVED, COMMERCIAL USAGE STRICTLY PROHIBITED */
  5. /* WRITTEN BY R. M. SUPNIK */
  6.  
  7. #include <stdio.h>
  8. #include "funcs.h"
  9. #include "vars.h"
  10.  
  11. logical moveto_(nr, who)
  12. integer nr;
  13. integer who;
  14. {
  15.     /* System generated locals */
  16.     logical ret_val;
  17.  
  18.     /* Local variables */
  19.     integer j;
  20.     logical lhr;
  21.     logical lnr, nlv;
  22.     integer bits;
  23.  
  24.     ret_val = FALSE_;
  25. /*                         !ASSUME FAILS. */
  26.     lhr = (rooms_1.rflag[play_1.here - 1] & RLAND) != 0;
  27.     lnr = (rooms_1.rflag[nr - 1] & RLAND) != 0;
  28.     j = advs_1.avehic[who - 1];
  29. /*                         !HIS VEHICLE */
  30.  
  31.     if (j != 0) {
  32.     goto L100;
  33.     }
  34. /*                         !IN VEHICLE? */
  35.     if (lnr) {
  36.     goto L500;
  37.     }
  38. /*                         !NO, GOING TO LAND? */
  39.     rspeak_(427);
  40. /*                         !CAN'T GO WITHOUT VEHICLE. */
  41.     return ret_val;
  42.  
  43. L100:
  44.     bits = 0;
  45. /*                         !ASSUME NOWHERE. */
  46.     if (j == oindex_1.rboat) {
  47.     bits = RWATER;
  48.     }
  49. /*                         !IN BOAT? */
  50.     if (j == oindex_1.ballo) {
  51.     bits = RAIR;
  52.     }
  53. /*                         !IN BALLOON? */
  54.     if (j == oindex_1.bucke) {
  55.     bits = RBUCK;
  56.     }
  57. /*                         !IN BUCKET? */
  58.     nlv = (rooms_1.rflag[nr - 1] & bits) == 0;
  59.     if (! lnr && nlv || lnr && lhr && nlv && bits != RLAND) {
  60.     goto L800;
  61.     }
  62.  
  63. L500:
  64.     ret_val = TRUE_;
  65. /*                         !MOVE SHOULD SUCCEED. */
  66.     if ((rooms_1.rflag[nr - 1] & RMUNG) == 0) {
  67.     goto L600;
  68.     }
  69.     rspeak_(rrand[nr - 1]);
  70. /*                         !YES, TELL HOW. */
  71.     return ret_val;
  72.  
  73. L600:
  74.     if (who != aindex_1.player) {
  75.     newsta_(advs_1.aobj[who - 1], 0, nr, 0, 0);
  76.     }
  77.     if (j != 0) {
  78.     newsta_(j, 0, nr, 0, 0);
  79.     }
  80.     play_1.here = nr;
  81.     advs_1.aroom[who - 1] = play_1.here;
  82.     scrupd_(rooms_1.rval[nr - 1]);
  83. /*                         !SCORE ROOM */
  84.     rooms_1.rval[nr - 1] = 0;
  85.     return ret_val;
  86.  
  87. L800:
  88.     rspsub_(428, objcts_1.odesc2[j - 1]);
  89. /*                         !WRONG VEHICLE. */
  90.     return ret_val;
  91. } /* moveto_ */
  92.  
  93. /* SCORE-- PRINT OUT CURRENT SCORE */
  94.  
  95. /* DECLARATIONS */
  96.  
  97. void score_(flg)
  98. logical flg;
  99. {
  100.     /* Initialized data */
  101.  
  102.     static const integer rank[10] = { 20,19,18,16,12,8,4,2,1,0 };
  103.     static const integer erank[5] = { 20,15,10,5,0 };
  104.  
  105.     /* System generated locals */
  106.     integer i__1;
  107.  
  108.     /* Local variables */
  109.     integer i, as;
  110.  
  111.     as = advs_1.ascore[play_1.winner - 1];
  112.  
  113.     if (findex_1.endgmf) {
  114.     goto L60;
  115.     }
  116. /*                         !ENDGAME? */
  117.     more_output(NULL);
  118.     printf("Your score ");
  119.     if (flg)
  120.     printf("would be");
  121.     else
  122.     printf("is");
  123.     printf(" %d [total of %d points], in %d move", as, state_1.mxscor,
  124.         state_1.moves);
  125.     if (state_1.moves != 1)
  126.     printf("s");
  127.     printf(".\n");
  128.  
  129.     for (i = 1; i <= 10; ++i) {
  130.     if (as * 20 / state_1.mxscor >= rank[i - 1]) {
  131.         goto L50;
  132.     }
  133. /* L10: */
  134.     }
  135. L50:
  136.     i__1 = i + 484;
  137.     rspeak_(i__1);
  138.     return;
  139.  
  140. L60:
  141.     more_output(NULL);
  142.     printf("Your score in the endgame ");
  143.     if (flg)
  144.     printf("would be");
  145.     else
  146.     printf("is");
  147.     printf(" %d [total of %d points], in %d moves.\n", state_1.egscor,
  148.        state_1.egmxsc, state_1.moves);
  149.  
  150.     for (i = 1; i <= 5; ++i) {
  151.     if (state_1.egscor * 20 / state_1.egmxsc >= erank[i - 1]) {
  152.         goto L80;
  153.     }
  154. /* L70: */
  155.     }
  156. L80:
  157.     i__1 = i + 786;
  158.     rspeak_(i__1);
  159. } /* score_ */
  160.  
  161. /* SCRUPD- UPDATE WINNER'S SCORE */
  162.  
  163. /* DECLARATIONS */
  164.  
  165. void scrupd_(n)
  166. integer n;
  167. {
  168.     if (findex_1.endgmf) {
  169.     goto L100;
  170.     }
  171. /*                         !ENDGAME? */
  172.     advs_1.ascore[play_1.winner - 1] += n;
  173. /*                         !UPDATE SCORE */
  174.     state_1.rwscor += n;
  175. /*                         !UPDATE RAW SCORE */
  176.     if (advs_1.ascore[play_1.winner - 1] < state_1.mxscor - state_1.deaths * 
  177.         10) {
  178.     return;
  179.     }
  180.     cevent_1.cflag[cindex_1.cevegh - 1] = TRUE_;
  181. /*                         !TURN ON END GAME */
  182.     cevent_1.ctick[cindex_1.cevegh - 1] = 15;
  183.     return;
  184.  
  185. L100:
  186.     state_1.egscor += n;
  187. /*                         !UPDATE EG SCORE. */
  188. } /* scrupd_ */
  189.